devfandomcom-20200223-history
Lua templating/Snippets
This page contains some quick lua snippets to help create modules. General Get template and transcluding page arguments local p = {} function p.doStuff(frame) local transclusionArguments = frame.args local templateArguments = frame:getParent().args local templateOption = templateArguments"option" or "" local transclusionOption = transclusionArguments"trans_option" or "" return transclusionOption .. templateOption end return p Check if a lua table contains values. local tTab = {} if next(tTab) then mw.log (true) end Get the title of the page that transcludes a page containing a lua invocation (parent frame). This is typically a template name. local p = {} function p.frameTitle(frame) local title = frame:getParent():getTitle() return (title) end return p Get parameters (bool= in example) passed to template that have no value and read them to set boolean variables (or just localBool in this example). local p = {} -- include Arguments module at dev.wikia.com local getArgs = require('Dev:Arguments').getArgs function p.myTemplate(frame) -- Implements local args = getArgs(frame, { trim = false, removeBlanks = false -- Keeps empty params }) local booleanVar = false -- Default booleanVar to false -- Set booleanVar to true if |bool= used with template if args"bool" then booleanVar = true end return p._myTemplate(args, booleanVar) end function p._myTemplate( args, isBool ) local localBool = isBool -- Set local boolean variable local returnWikitext = nil -- Do stuff that is conditional on isBool and set returnWikitext return returnWikitext end Text Find a piece of text within text. local textToFind = "one" local content = "In the end there can be only one" local startposition , endposition = string.find(content, textToFind) if startposition then mw.log (true) end Show only a specific number of sequential tokens (group of characters) from a piece of text. local text = "Human beings are a disease, a cancer of this planet." local tab = mw.text.split( text, " ") local tokens = 5 local output = "" for i= 0, tokens do output = output .. " " .. (tabi or "") end print(output) Output : Human beings are a disease, Math Round a number. function p.round(num, idp) local roundedNumber = tonumber(string.format("%." .. (idp or 0) .. "f", num)) return (roundedNumber) end Date Add days to a date. local iDays = 50 local iDayToSecs = iDays * 24 * 60 *60 local timestamp = os.time({month=12,year=2012,day=10}) local futureDate = os.date("%Y-%m-%d", timestamp + iDayToSecs) mw.log (futureDate) Conditional statements Using a ternary operator. local condition = true local trueText = "Bananas are good" local returnText = condition and trueText or "" --This returns trueText if condition is true, and "" if not mw.log (returnText) Sorting Sorting using an Associative tableSort a Table[] in Lua. http://stackoverflow.com/a/15706820 function spairs(t, order) -- collect the keys local keys = {} for k in pairs(t) do keys#keys+1 = k end -- if order function given, sort by it by passing the table and keys a, b, -- otherwise just sort the keys if order then table.sort(keys, function(a,b) return order(t, a, b) end) else table.sort(keys) end -- return the iterator function local i = 0 return function() i = i + 1 if keysi then return keysi, t[keysi] end end end Usage local power = { Majin = "11", Buu = "3", Baba = "10" , "5" = "ratty", "8" = "bum" } -- basic usage, just sort by the keys for k,v in spairs(power) do print(k,v) end --Sorts by keys --Output --5 ratty 8 bum Baba 10 Buu 3 Majin 11 -- Sort by values for k,v in spairs(power, function(t,a,b) return tb < ta end) do print(k,v) end -->5 ratty -->8 bum -->Buu 3 -->Majin 11 -->Baba 10 See also * Module:Stats * Lua templating/Converting Wikitext templates References Category:Lua